USE [MIS_GRUPO_07]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID ('dbo.AUXFN_Coordinates_to_Barrio', 'FN') IS NOT NULL DROP FUNCTION dbo.AUXFN_Coordinates_to_Barrio;
GO
CREATE FUNCTION dbo.AUXFN_Coordinates_to_Barrio (@paramLat decimal(10,6), @paramLon decimal(10,6))
RETURNS nvarchar (50)
AS
BEGIN
	-- Retornar el barrio mas cercano al punto pasado como parametro. 
	-- Optimizacion: no es necesario hacer la raiz cuadrada.
	 
	 RETURN (
		 SELECT TOP 1 barrio FROM [dbo].[AUX_Coordinates_to_Barrio]
		 ORDER BY (@paramLat - cLat)*(@paramLat - cLat) + (@paramLon - cLon)*(@paramLon - cLon) ASC
	 )
	 
END;
GO

IF OBJECT_ID ('dbo.TR_INS_DIM_Estacion', 'TR') IS NOT NULL DROP TRIGGER dbo.TR_INS_DIM_Estacion;
GO
CREATE TRIGGER dbo.TR_INS_DIM_Estacion ON  dbo.INS_DIM_Estacion AFTER INSERT AS 
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	INSERT INTO DIM_Estacion (estacionID, estacionNombre, barrio)
	SELECT I.estacionID, I.estacionNombre, 
		(
			SELECT TOP 1 barrio FROM [dbo].[AUX_Coordinates_to_Barrio] AUX
			ORDER BY (I.cLat - AUX.cLat)*(I.cLat - AUX.cLat) + (I.cLon - AUX.cLon)*(I.cLon - AUX.cLon) ASC
		)
	FROM INSERTED I
	
	DELETE INS_DIM_Estacion
END;
GO
